package com.ruoyi.examation.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.examation.domain.ExamRegistration;
import com.ruoyi.examation.vo.ExamRegistrationVo;
import com.ruoyi.examation.vo.ExamRegistrationUserVo;

import java.util.List;

/**
 * 考试报名Service接口
 *
 * @author Tellsea
 * @date 2025-09-28
 */
public interface IExamRegistrationService extends IService<ExamRegistration> {

    /**
     * 分页查询
     *
     * @param entity
     * @return
     */
    TableDataInfo<ExamRegistrationVo> queryList(ExamRegistrationVo entity);

    /**
     * 查询全部
     *
     * @param entity
     * @return
     */
    List<ExamRegistrationVo> queryAll(ExamRegistrationVo entity);

    /**
     * 根据ID查询
     *
     * @param id
     * @return
     */
    ExamRegistrationVo queryById(Long id);

    /**
     * 考试报名
     *
     * @param examId 考试ID
     * @param venueId 考场ID
     * @param userId 用户ID
     * @return
     */
    boolean registerExam(Long examId, Long venueId, Long userId);

    /**
     * 查询报名人员列表（包含用户信息）
     *
     * @param examId 考试ID
     * @param venueId 考场ID
     * @return
     */
    List<ExamRegistrationUserVo> queryRegistrationUsers(Long examId, Long venueId);

    /**
     * 根据考试ID和考试时间ID查询报名人员列表（包含用户信息）
     *
     * @param examId 考试ID
     * @param scheduleId 考试时间ID
     * @return
     */
    List<ExamRegistrationUserVo> queryRegistrationUsersBySchedule(Long examId, Long scheduleId);

    /**
     * 根据考试ID和考试时间ID分页查询报名人员列表（包含用户信息）
     *
     * @param examId 考试ID
     * @param scheduleId 考试时间ID
     * @return
     */
    TableDataInfo<ExamRegistrationUserVo> queryRegistrationUsersBySchedulePage(Long examId, Long scheduleId);

    /**
     * 用户报名考试（基于考试时间ID）
     *
     * @param examId 考试ID
     * @param scheduleId 考试时间ID
     * @param userId 用户ID
     * @return
     */
    boolean registerExamBySchedule(Long examId, Long scheduleId, Long userId);
}
